import router from "@/routers/index";
import { getFlatArr } from "@/utils/util";
import { LOGIN_URL } from "@/config/config";
import { ElNotification } from "element-plus";
import { AuthStore } from "@/stores/modules/auth";
import { notFoundRouter } from "@/routers/modules/staticRouter";

// 引入 views 文件夹下所有 vue 文件
const modules = import.meta.glob("@/views/**/*.vue");

/**
 * 初始化动态路由
 */
export const initDynamicRouter = async () => {
	// 1.获取菜单列表 && 按钮权限
	const authStore = AuthStore();
	await authStore.getAuthMenuList();
	await authStore.getAuthButtonList();

	// 2.判断当前用户有没有菜单权限
	if (!authStore.authMenuListGet.length) {
		ElNotification({
			title: "无权访问",
			message: "当前账号无任何菜单权限，请联系系统管理员！",
			type: "warning",
			duration: 3000
		});
		router.replace(LOGIN_URL);
		return Promise.reject("No permission");
	}

	// 3.添加动态路由 (getFlatArr 方法把菜单全部处理成一维数组，方便添加动态路由)
	let dynamicRouter = getFlatArr(JSON.parse(JSON.stringify(authStore.authMenuListGet)));
	dynamicRouter.forEach((item: any) => {
		if (item.children) delete item.children;
		if (item.component) item.component = modules["/src/views" + item.component + ".vue"];
		if (item.meta.isFull) {
			router.addRoute(item);
		} else {
			router.addRoute("layout", item);
		}
	});

	// 4.最后添加 notFoundRouter
	router.addRoute(notFoundRouter);
};
